home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / xfs / dmapi.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-04-01  |  21.3 KB  |  1,068 lines

  1. /*
  2.  * Copyright (c) 1995-2003 Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This program is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU General Public License as
  7.  * published by the Free Software Foundation.
  8.  *
  9.  * This program is distributed in the hope that it would be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write the Free Software Foundation,
  16.  * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  17.  */
  18.  
  19. #ifndef __DMAPI_H__
  20. #define __DMAPI_H__
  21.  
  22. #ifdef    __cplusplus
  23. extern    "C" {
  24. #endif
  25.  
  26. #ifndef __KERNEL__
  27. #include <xfs/xfs.h>
  28. #include <xfs/handle.h>
  29. #endif
  30.  
  31. /**************************************************************************
  32.  *                                      *
  33.  * The SGI implementation of DMAPI is based upon the X/Open document      *
  34.  *    Systems Management: Data Storage Managment (XDSM) API          *
  35.  * dated February 1997.     Not all DMAPI functions and structure fields      *
  36.  * have been implemented.  Most importantly, the DMAPI functions      *
  37.  * dm_request_right, dm_release_right, dm_query_right, dm_upgrade_right      *
  38.  * and dm_downgrade_right do not work as described in the specification.  *
  39.  *                                      *
  40.  * The XFS filesystem currently does not allow its locking mechanisms to  *
  41.  * be externally accessed from user space.  While the above-mentioned      *
  42.  * dm_xxx_right functions exist and can be called by applications, they      *
  43.  * always return successfully without actually obtaining any locks      *
  44.  * within the filesystem.                          *
  45.  *                                      *
  46.  * Applications which do not need full rights support and which only      *
  47.  * make dm_xxx_right calls in order to satisfy the input requirements of  *
  48.  * other DMAPI calls should be able to use these routines to avoid      *
  49.  * having to implement special-case code for SGI platforms.  Applications *
  50.  * which truely need the capabilities of a full implementation of rights  *
  51.  * will unfortunately have to come up with alternate software solutions      *
  52.  * until such time as rights can be completely implemented.          *
  53.  *                                      *
  54.  * Functions and structure fields defined within this file which are not  *
  55.  * supported in the SGI implementation of DMAPI are indicated by comments *
  56.  * following their definitions such as "not supported", or "not          *
  57.  * completely supported".  Any function or field not so marked may be      *
  58.  * assumed to work exactly according to the spec.              *
  59.  *                                      *
  60.  **************************************************************************/
  61.  
  62.  
  63.  
  64. /* The first portion of this file contains defines and typedefs that are
  65.    DMAPI implementation-dependent, and could be different on other platforms.
  66. */
  67.  
  68. typedef __s64        dm_attrloc_t;
  69. typedef unsigned int    dm_boolean_t;
  70. typedef __u64        dm_eventset_t;
  71. typedef __u64        dm_fsid_t;
  72. typedef __u64        dm_ino_t;
  73. typedef __u32        dm_igen_t;
  74. typedef __s64        dm_off_t;
  75. typedef unsigned int    dm_sequence_t;
  76. typedef int        dm_sessid_t;
  77. typedef __u64        dm_size_t;
  78. typedef __s64        dm_ssize_t;
  79. typedef int        dm_token_t;
  80.  
  81. /* XXX dev_t, mode_t, and nlink_t are not the same size in kernel space
  82.    and user space.  This affects the field offsets for dm_stat_t.
  83.    The following solution is temporary.
  84.  
  85.    user space sizes:  dev_t=8  mode_t=4     nlink_t=4
  86.    kernel space       :  dev_t=2  mode_t=2     nlink_t=2
  87.  
  88. */
  89. typedef __s64        dm_dev_t;
  90. typedef int        dm_mode_t;
  91. typedef int        dm_nlink_t;
  92.  
  93.  
  94. #define DM_REGION_NOEVENT    0x0
  95. #define DM_REGION_READ        0x1
  96. #define DM_REGION_WRITE        0x2
  97. #define DM_REGION_TRUNCATE    0x4
  98.  
  99. /* Values for the mask argument used with dm_get_fileattr, dm_get_bulkattr,
  100.    dm_get_dirattrs, and dm_set_fileattr.
  101. */
  102.  
  103. #define DM_AT_MODE    0x0001
  104. #define DM_AT_UID    0x0002
  105. #define DM_AT_GID    0x0004
  106. #define DM_AT_ATIME    0x0008
  107. #define DM_AT_MTIME    0x0010
  108. #define DM_AT_CTIME    0x0020
  109. #define DM_AT_SIZE    0x0040
  110. #define DM_AT_DTIME    0x0080
  111. #define DM_AT_HANDLE    0x0100
  112. #define DM_AT_EMASK    0x0200
  113. #define DM_AT_PMANR    0x0400
  114. #define DM_AT_PATTR    0x0800
  115. #define DM_AT_STAT    0x1000
  116. #define DM_AT_CFLAG    0x2000
  117.  
  118. #define DM_EV_WAIT    0x1        /* used in dm_get_events() */
  119.  
  120. #define DM_MOUNT_RDONLY 0x1        /* me_mode field in dm_mount_event_t */
  121.  
  122. #define DM_RR_WAIT    0x1
  123.  
  124. #define DM_UNMOUNT_FORCE 0x1        /* ne_mode field in dm_namesp_event_t */
  125.  
  126. #define DM_WRITE_SYNC    0x1        /* used in dm_write_invis() */
  127.  
  128. #define DM_SESSION_INFO_LEN    256
  129. #define DM_NO_SESSION        0
  130. #define DM_TRUE            1
  131. #define DM_FALSE        0
  132. #define DM_INVALID_TOKEN    0
  133. #define DM_NO_TOKEN        (-1)
  134. #define DM_INVALID_HANP        NULL
  135. #define DM_INVALID_HLEN        0
  136. #define DM_GLOBAL_HANP        ((void *)(1LL))
  137. #define DM_GLOBAL_HLEN        ((size_t)(1))
  138. #define DM_VER_STR_CONTENTS    "SGI DMAPI (XDSM) API, Release 1.1."
  139.  
  140.  
  141. #define DMEV_SET(event_type, event_list) \
  142.     ((event_list) |= (1 << (event_type)))
  143. #define DMEV_CLR(event_type, event_list) \
  144.     ((event_list) &= ~(1 << (event_type)))
  145. #define DMEV_ISSET(event_type, event_list) \
  146.     (int)(((event_list) & (1 << (event_type))) != 0)
  147. #define DMEV_ZERO(event_list) \
  148.     (event_list) = 0
  149.  
  150.  
  151. typedef struct {
  152.     int    vd_offset;    /* offset from start of containing struct */
  153.     unsigned int    vd_length;    /* length of data starting at vd_offset */
  154. } dm_vardata_t;
  155.  
  156. #define DM_GET_VALUE(p, field, type) \
  157.     ((type) ((char *)(p) + (p)->field.vd_offset))
  158.  
  159. #define DM_GET_LEN(p, field) \
  160.     ((p)->field.vd_length)
  161.  
  162. #define DM_STEP_TO_NEXT(p, type) \
  163.     ((type) ((p)->_link ? (char *)(p) + (p)->_link : NULL))
  164.  
  165.  
  166.  
  167.  
  168. /* The remainder of this include file contains defines, typedefs, and
  169.    structures which are strictly defined by the DMAPI 2.3 specification.
  170.  
  171.    (The _link field which appears in several structures is an
  172.    implementation-specific way to implement DM_STEP_TO_NEXT, and
  173.    should not be referenced directly by application code.)
  174. */
  175.  
  176.  
  177. #define DM_ATTR_NAME_SIZE    8
  178.  
  179.  
  180. struct dm_attrname {
  181.     unsigned char    an_chars[DM_ATTR_NAME_SIZE];
  182. };
  183. typedef struct dm_attrname    dm_attrname_t;
  184.  
  185.  
  186. struct dm_attrlist {
  187.     int        _link;
  188.     dm_attrname_t    al_name;
  189.     dm_vardata_t    al_data;
  190. };
  191. typedef struct dm_attrlist    dm_attrlist_t;
  192.  
  193.  
  194. typedef enum {
  195.     DM_CONFIG_INVALID,
  196.     DM_CONFIG_BULKALL,
  197.     DM_CONFIG_CREATE_BY_HANDLE,
  198.     DM_CONFIG_DTIME_OVERLOAD,
  199.     DM_CONFIG_LEGACY,
  200.     DM_CONFIG_LOCK_UPGRADE,
  201.     DM_CONFIG_MAX_ATTR_ON_DESTROY,
  202.     DM_CONFIG_MAX_ATTRIBUTE_SIZE,
  203.     DM_CONFIG_MAX_HANDLE_SIZE,
  204.     DM_CONFIG_MAX_MANAGED_REGIONS,
  205.     DM_CONFIG_MAX_MESSAGE_DATA,
  206.     DM_CONFIG_OBJ_REF,
  207.     DM_CONFIG_PENDING,
  208.     DM_CONFIG_PERS_ATTRIBUTES,
  209.     DM_CONFIG_PERS_EVENTS,
  210.     DM_CONFIG_PERS_INHERIT_ATTRIBS,
  211.     DM_CONFIG_PERS_MANAGED_REGIONS,
  212.     DM_CONFIG_PUNCH_HOLE,
  213.     DM_CONFIG_TOTAL_ATTRIBUTE_SPACE,
  214.     DM_CONFIG_WILL_RETRY
  215. } dm_config_t;
  216.  
  217.  
  218. struct    dm_dioinfo {            /* non-standard SGI addition */
  219.     unsigned int    d_mem;
  220.     unsigned int    d_miniosz;
  221.     unsigned int    d_maxiosz;
  222.     dm_boolean_t    d_dio_only;
  223. };
  224. typedef struct dm_dioinfo    dm_dioinfo_t;
  225.  
  226.  
  227. struct dm_dispinfo {
  228.     int        _link;
  229.     unsigned int    di_pad1;        /* reserved; do not reference */
  230.     dm_vardata_t    di_fshandle;
  231.     dm_eventset_t    di_eventset;
  232. };
  233. typedef struct dm_dispinfo    dm_dispinfo_t;
  234.  
  235.  
  236. #ifndef HAVE_DM_EVENTTYPE_T
  237. #define HAVE_DM_EVENTTYPE_T
  238. typedef enum {
  239.     DM_EVENT_INVALID    = -1,
  240.     DM_EVENT_CANCEL        = 0,        /* not supported */
  241.     DM_EVENT_MOUNT        = 1,
  242.     DM_EVENT_PREUNMOUNT    = 2,
  243.     DM_EVENT_UNMOUNT    = 3,
  244.     DM_EVENT_DEBUT        = 4,        /* not supported */
  245.     DM_EVENT_CREATE        = 5,
  246.     DM_EVENT_CLOSE        = 6,        /* not supported */
  247.     DM_EVENT_POSTCREATE    = 7,
  248.     DM_EVENT_REMOVE        = 8,
  249.     DM_EVENT_POSTREMOVE    = 9,
  250.     DM_EVENT_RENAME        = 10,
  251.     DM_EVENT_POSTRENAME    = 11,
  252.     DM_EVENT_LINK        = 12,
  253.     DM_EVENT_POSTLINK    = 13,
  254.     DM_EVENT_SYMLINK    = 14,
  255.     DM_EVENT_POSTSYMLINK    = 15,
  256.     DM_EVENT_READ        = 16,
  257.     DM_EVENT_WRITE        = 17,
  258.     DM_EVENT_TRUNCATE    = 18,
  259.     DM_EVENT_ATTRIBUTE    = 19,
  260.     DM_EVENT_DESTROY    = 20,
  261.     DM_EVENT_NOSPACE    = 21,
  262.     DM_EVENT_USER        = 22,
  263.     DM_EVENT_MAX        = 23
  264. } dm_eventtype_t;
  265. #endif
  266.  
  267.  
  268. struct dm_eventmsg {
  269.     int        _link;
  270.     dm_eventtype_t    ev_type;
  271.     dm_token_t    ev_token;
  272.     dm_sequence_t    ev_sequence;
  273.     dm_vardata_t    ev_data;
  274. };
  275. typedef struct dm_eventmsg    dm_eventmsg_t;
  276.  
  277.  
  278. struct dm_cancel_event {            /* not supported */
  279.     dm_sequence_t    ce_sequence;
  280.     dm_token_t    ce_token;
  281. };
  282. typedef struct dm_cancel_event    dm_cancel_event_t;
  283.  
  284.  
  285. struct dm_data_event {
  286.     dm_vardata_t    de_handle;
  287.     dm_off_t    de_offset;
  288.     dm_size_t    de_length;
  289. };
  290. typedef struct dm_data_event dm_data_event_t;
  291.  
  292. struct dm_destroy_event {
  293.     dm_vardata_t        ds_handle;
  294.     dm_attrname_t        ds_attrname;
  295.     dm_vardata_t        ds_attrcopy;
  296. };
  297. typedef struct dm_destroy_event dm_destroy_event_t;
  298.  
  299. struct dm_mount_event {
  300.     dm_mode_t    me_mode;
  301.     dm_vardata_t    me_handle1;
  302.     dm_vardata_t    me_handle2;
  303.     dm_vardata_t    me_name1;
  304.     dm_vardata_t    me_name2;
  305.     dm_vardata_t    me_roothandle;
  306. };
  307. typedef struct dm_mount_event dm_mount_event_t;
  308.  
  309. struct dm_namesp_event {
  310.     dm_mode_t    ne_mode;
  311.     dm_vardata_t    ne_handle1;
  312.     dm_vardata_t    ne_handle2;
  313.     dm_vardata_t    ne_name1;
  314.     dm_vardata_t    ne_name2;
  315.     int        ne_retcode;
  316. };
  317. typedef struct dm_namesp_event dm_namesp_event_t;
  318.  
  319.  
  320. typedef enum {
  321.     DM_EXTENT_INVALID,
  322.     DM_EXTENT_RES,
  323.     DM_EXTENT_HOLE
  324. } dm_extenttype_t;
  325.  
  326.  
  327. struct dm_extent {
  328.     dm_extenttype_t ex_type;
  329.     unsigned int    ex_pad1;        /* reserved; do not reference */
  330.     dm_off_t    ex_offset;
  331.     dm_size_t    ex_length;
  332. };
  333. typedef struct dm_extent dm_extent_t;
  334.  
  335. struct dm_fileattr {
  336.     dm_mode_t    fa_mode;
  337.     uid_t        fa_uid;
  338.     gid_t        fa_gid;
  339.     time_t        fa_atime;
  340.     time_t        fa_mtime;
  341.     time_t        fa_ctime;
  342.     time_t        fa_dtime;
  343.     unsigned int    fa_pad1;        /* reserved; do not reference */
  344.     dm_off_t    fa_size;
  345. };
  346. typedef struct dm_fileattr dm_fileattr_t;
  347.  
  348.  
  349. struct dm_inherit {                /* not supported */
  350.     dm_attrname_t    ih_name;
  351.     dm_mode_t    ih_filetype;
  352. };
  353. typedef struct dm_inherit dm_inherit_t;
  354.  
  355.  
  356. typedef enum {
  357.     DM_MSGTYPE_INVALID,
  358.     DM_MSGTYPE_SYNC,
  359.     DM_MSGTYPE_ASYNC
  360. } dm_msgtype_t;
  361.  
  362.  
  363. struct dm_region {
  364.     dm_off_t    rg_offset;
  365.     dm_size_t    rg_size;
  366.     unsigned int    rg_flags;
  367.     unsigned int    rg_pad1;        /* reserved; do not reference */
  368. };
  369. typedef struct dm_region dm_region_t;
  370.  
  371.  
  372. typedef enum {
  373.     DM_RESP_INVALID,
  374.     DM_RESP_CONTINUE,
  375.     DM_RESP_ABORT,
  376.     DM_RESP_DONTCARE
  377. } dm_response_t;
  378.  
  379.  
  380. #ifndef HAVE_DM_RIGHT_T
  381. #define HAVE_DM_RIGHT_T
  382. typedef enum {
  383.     DM_RIGHT_NULL,
  384.     DM_RIGHT_SHARED,
  385.     DM_RIGHT_EXCL
  386. } dm_right_t;
  387. #endif
  388.  
  389.  
  390. struct dm_stat {
  391.     int        _link;
  392.     dm_vardata_t    dt_handle;
  393.     dm_vardata_t    dt_compname;
  394.     int        dt_nevents;
  395.     dm_eventset_t    dt_emask;
  396.     int        dt_pers;        /* field not supported */
  397.     int        dt_pmanreg;
  398.     time_t        dt_dtime;
  399.     unsigned int    dt_change;        /* field not supported */
  400.     unsigned int    dt_pad1;        /* reserved; do not reference */
  401.     dm_dev_t    dt_dev;
  402.     dm_ino_t    dt_ino;
  403.     dm_mode_t    dt_mode;
  404.     dm_nlink_t    dt_nlink;
  405.     uid_t        dt_uid;
  406.     gid_t        dt_gid;
  407.     dm_dev_t    dt_rdev;
  408.     unsigned int    dt_pad2;        /* reserved; do not reference */
  409.     dm_off_t    dt_size;
  410.     time_t        dt_atime;
  411.     time_t        dt_mtime;
  412.     time_t        dt_ctime;
  413.     unsigned int    dt_blksize;
  414.     dm_size_t    dt_blocks;
  415.  
  416.     /* Non-standard filesystem-specific fields.  Currently XFS is the only
  417.        supported filesystem type.
  418.     */
  419.  
  420.     __u64    dt_pad3;    /* reserved; do not reference */
  421.     int        dt_fstype;    /* filesystem index; see sysfs(2) */
  422.     union    {
  423.         struct    {
  424.             dm_igen_t    igen;
  425.             unsigned int    xflags;
  426.             unsigned int    extsize;
  427.             unsigned int    extents;
  428.             unsigned short    aextents;
  429.             unsigned short    dmstate;
  430.         } sgi_xfs;
  431.     } fsys_dep;
  432. };
  433. typedef struct dm_stat    dm_stat_t;
  434.  
  435. #define dt_xfs_igen    fsys_dep.sgi_xfs.igen
  436. #define dt_xfs_xflags    fsys_dep.sgi_xfs.xflags
  437. #define dt_xfs_extsize    fsys_dep.sgi_xfs.extsize
  438. #define dt_xfs_extents    fsys_dep.sgi_xfs.extents
  439. #define dt_xfs_aextents fsys_dep.sgi_xfs.aextents
  440. #define dt_xfs_dmstate    fsys_dep.sgi_xfs.dmstate
  441.  
  442. /* Flags for the non-standard dt_xfs_xflags field. */
  443.  
  444. #define DM_XFLAG_REALTIME    0x00000001
  445. #define DM_XFLAG_PREALLOC    0x00000002
  446. #define DM_XFLAG_IMMUTABLE    0x00000008
  447. #define DM_XFLAG_APPEND        0x00000010
  448. #define DM_XFLAG_SYNC        0x00000020
  449. #define DM_XFLAG_NOATIME    0x00000040
  450. #define DM_XFLAG_NODUMP        0x00000080
  451. #define DM_XFLAG_HASATTR    0x80000000
  452.  
  453.  
  454. struct    dm_timestruct {
  455.     time_t        dm_tv_sec;
  456.     int        dm_tv_nsec;
  457. };
  458. typedef struct dm_timestruct dm_timestruct_t;
  459.  
  460.  
  461. struct    dm_xstat {                /* not supported */
  462.     dm_stat_t    dx_statinfo;
  463.     dm_vardata_t    dx_attrdata;
  464. };
  465. typedef struct dm_xstat dm_xstat_t;
  466.  
  467.  
  468. #define MAXDMFSFIDSZ    46
  469.  
  470. struct dm_fid {
  471.     __u16    dm_fid_len;        /* length of remainder    */
  472.     __u16    dm_fid_pad;
  473.     __u32    dm_fid_gen;        /* generation number    */
  474.     __u64    dm_fid_ino;        /* 64 bits inode number */
  475. };
  476. typedef struct dm_fid dm_fid_t;
  477.  
  478.  
  479. struct dm_handle {
  480.     union {
  481.         __s64        align;    /* force alignment of ha_fid     */
  482.         dm_fsid_t  _ha_fsid;    /* unique file system identifier */
  483.     } ha_u;
  484.     dm_fid_t    ha_fid;        /* file system specific file ID     */
  485. };
  486. typedef struct dm_handle dm_handle_t;
  487. #define ha_fsid ha_u._ha_fsid
  488.  
  489. #define DM_HSIZE(handle)    (((char *) &(handle).ha_fid.dm_fid_pad     \
  490.                  - (char *) &(handle))              \
  491.                  + (handle).ha_fid.dm_fid_len)
  492.  
  493. #define DM_HANDLE_CMP(h1, h2)    memcmp(h1, h2, sizeof(dm_handle_t))
  494.  
  495. #define DM_FSHSIZE        sizeof(dm_fsid_t)
  496.  
  497.  
  498. /* The following list provides the prototypes for all functions defined in
  499.    the DMAPI interface.
  500. */
  501.  
  502. extern int
  503. dm_clear_inherit(                /* not supported */
  504.     dm_sessid_t    sid,
  505.     void        *hanp,
  506.     size_t        hlen,
  507.     dm_token_t    token,
  508.     dm_attrname_t    *attrnamep);
  509.  
  510. extern int
  511. dm_create_by_handle(                /* not supported */
  512.     dm_sessid_t    sid,
  513.     void        *dirhanp,
  514.     size_t        dirhlen,
  515.     dm_token_t    token,
  516.     void        *hanp,
  517.     size_t        hlen,
  518.     char        *cname);
  519.  
  520. extern int
  521. dm_create_session(
  522.     dm_sessid_t    oldsid,
  523.     char        *sessinfop,
  524.     dm_sessid_t    *newsidp);
  525.  
  526. extern int
  527. dm_create_userevent(
  528.     dm_sessid_t    sid,
  529.     size_t        msglen,
  530.     void        *msgdatap,
  531.     dm_token_t    *tokenp);
  532.  
  533. extern int
  534. dm_destroy_session(
  535.     dm_sessid_t    sid);
  536.  
  537. extern int
  538. dm_downgrade_right(        /* not completely supported; see caveat above */
  539.     dm_sessid_t    sid,
  540.     void        *hanp,
  541.     size_t        hlen,
  542.     dm_token_t    token);
  543.  
  544. extern int
  545. dm_fd_to_handle(
  546.     int        fd,
  547.     void        **hanpp,
  548.     size_t        *hlenp);
  549.  
  550. extern int
  551. dm_find_eventmsg(
  552.     dm_sessid_t    sid,
  553.     dm_token_t    token,
  554.     size_t        buflen,
  555.     void        *bufp,
  556.     size_t        *rlenp);
  557.  
  558. extern int
  559. dm_get_allocinfo(
  560.     dm_sessid_t    sid,
  561.     void        *hanp,
  562.     size_t        hlen,
  563.     dm_token_t    token,
  564.     dm_off_t    *offp,
  565.     unsigned int    nelem,
  566.     dm_extent_t    *extentp,
  567.     unsigned int    *nelemp);
  568.  
  569. extern int
  570. dm_get_bulkall(                    /* not supported */
  571.     dm_sessid_t    sid,
  572.     void        *hanp,
  573.     size_t        hlen,
  574.     dm_token_t    token,
  575.     unsigned int    mask,
  576.     dm_attrname_t    *attrnamep,
  577.     dm_attrloc_t    *locp,
  578.     size_t        buflen,
  579.     void        *bufp,
  580.     size_t        *rlenp);
  581.  
  582. extern int
  583. dm_get_bulkattr(
  584.     dm_sessid_t    sid,
  585.     void        *hanp,
  586.     size_t        hlen,
  587.     dm_token_t    token,
  588.     unsigned int    mask,
  589.     dm_attrloc_t    *locp,
  590.     size_t        buflen,
  591.     void        *bufp,
  592.     size_t        *rlenp);
  593.  
  594. extern int
  595. dm_get_config(
  596.     void        *hanp,
  597.     size_t        hlen,
  598.     dm_config_t    flagname,
  599.     dm_size_t    *retvalp);
  600.  
  601. extern int
  602. dm_get_config_events(
  603.     void        *hanp,
  604.     size_t        hlen,
  605.     unsigned int    nelem,
  606.     dm_eventset_t    *eventsetp,
  607.     unsigned int    *nelemp);
  608.  
  609. extern int
  610. dm_get_dirattrs(
  611.     dm_sessid_t    sid,
  612.     void        *hanp,
  613.     size_t        hlen,
  614.     dm_token_t    token,
  615.     unsigned int    mask,
  616.     dm_attrloc_t    *locp,
  617.     size_t        buflen,
  618.     void        *bufp,
  619.     size_t        *rlenp);
  620.  
  621. extern int
  622. dm_get_dmattr(
  623.     dm_sessid_t    sid,
  624.     void        *hanp,
  625.     size_t        hlen,
  626.     dm_token_t    token,
  627.     dm_attrname_t    *attrnamep,
  628.     size_t        buflen,
  629.     void        *bufp,
  630.     size_t        *rlenp);
  631.  
  632. extern int
  633. dm_get_eventlist(
  634.     dm_sessid_t    sid,
  635.     void        *hanp,
  636.     size_t        hlen,
  637.     dm_token_t    token,
  638.     unsigned int    nelem,
  639.     dm_eventset_t    *eventsetp,
  640.     unsigned int    *nelemp);
  641.  
  642. extern int
  643. dm_get_events(
  644.     dm_sessid_t    sid,
  645.     unsigned int    maxmsgs,
  646.     unsigned int    flags,
  647.     size_t        buflen,
  648.     void        *bufp,
  649.     size_t        *rlenp);
  650.  
  651. extern int
  652. dm_get_fileattr(
  653.     dm_sessid_t    sid,
  654.     void        *hanp,
  655.     size_t        hlen,
  656.     dm_token_t    token,
  657.     unsigned int    mask,
  658.     dm_stat_t    *statp);
  659.  
  660. extern int
  661. dm_get_mountinfo(
  662.     dm_sessid_t    sid,
  663.     void        *hanp,
  664.     size_t        hlen,
  665.     dm_token_t    token,
  666.     size_t        buflen,
  667.     void        *bufp,
  668.     size_t        *rlenp);
  669.  
  670. extern int
  671. dm_get_region(
  672.     dm_sessid_t    sid,
  673.     void        *hanp,
  674.     size_t        hlen,
  675.     dm_token_t    token,
  676.     unsigned int    nelem,
  677.     dm_region_t    *regbufp,
  678.     unsigned int    *nelemp);
  679.  
  680. extern int
  681. dm_getall_disp(
  682.     dm_sessid_t    sid,
  683.     size_t        buflen,
  684.     void        *bufp,
  685.     size_t        *rlenp);
  686.  
  687. extern int
  688. dm_getall_dmattr(
  689.     dm_sessid_t    sid,
  690.     void        *hanp,
  691.     size_t        hlen,
  692.     dm_token_t    token,
  693.     size_t        buflen,
  694.     void        *bufp,
  695.     size_t        *rlenp);
  696.  
  697. extern int
  698. dm_getall_inherit(                /* not supported */
  699.     dm_sessid_t    sid,
  700.     void        *hanp,
  701.     size_t        hlen,
  702.     dm_token_t    token,
  703.     unsigned int    nelem,
  704.     dm_inherit_t    *inheritbufp,
  705.     unsigned int    *nelemp);
  706.  
  707. extern int
  708. dm_getall_sessions(
  709.     unsigned int    nelem,
  710.     dm_sessid_t    *sidbufp,
  711.     unsigned int    *nelemp);
  712.  
  713. extern int
  714. dm_getall_tokens(
  715.     dm_sessid_t    sid,
  716.     unsigned int    nelem,
  717.     dm_token_t    *tokenbufp,
  718.     unsigned int    *nelemp);
  719.  
  720. extern int
  721. dm_handle_cmp(
  722.     void        *hanp1,
  723.     size_t        hlen1,
  724.     void        *hanp2,
  725.     size_t        hlen2);
  726.  
  727. extern void
  728. dm_handle_free(
  729.     void        *hanp,
  730.     size_t        hlen);
  731.  
  732. extern u_int
  733. dm_handle_hash(
  734.     void        *hanp,
  735.     size_t        hlen);
  736.  
  737. extern dm_boolean_t
  738. dm_handle_is_valid(
  739.     void        *hanp,
  740.     size_t        hlen);
  741.  
  742. extern int
  743. dm_handle_to_fshandle(
  744.     void        *hanp,
  745.     size_t        hlen,
  746.     void        **fshanpp,
  747.     size_t        *fshlenp);
  748.  
  749. extern int
  750. dm_handle_to_fsid(
  751.     void        *hanp,
  752.     size_t        hlen,
  753.     dm_fsid_t    *fsidp);
  754.  
  755. extern int
  756. dm_handle_to_igen(
  757.     void        *hanp,
  758.     size_t        hlen,
  759.     dm_igen_t    *igenp);
  760.  
  761. extern int
  762. dm_handle_to_ino(
  763.     void        *hanp,
  764.     size_t        hlen,
  765.     dm_ino_t    *inop);
  766.  
  767. extern int
  768. dm_handle_to_path(
  769.     void        *dirhanp,
  770.     size_t        dirhlen,
  771.     void        *targhanp,
  772.     size_t        targhlen,
  773.     size_t        buflen,
  774.     char        *pathbufp,
  775.     size_t        *rlenp);
  776.  
  777. extern int
  778. dm_init_attrloc(
  779.     dm_sessid_t    sid,
  780.     void        *hanp,
  781.     size_t        hlen,
  782.     dm_token_t    token,
  783.     dm_attrloc_t    *locp);
  784.  
  785. extern int
  786. dm_init_service(
  787.     char        **versionstrpp);
  788.  
  789. extern int
  790. dm_make_handle(
  791.     dm_fsid_t    *fsidp,
  792.     dm_ino_t    *inop,
  793.     dm_igen_t    *igenp,
  794.     void        **hanpp,
  795.     size_t        *hlenp);
  796.  
  797. extern int
  798. dm_make_fshandle(
  799.     dm_fsid_t    *fsidp,
  800.     void        **hanpp,
  801.     size_t        *hlenp);
  802.  
  803. extern int
  804. dm_mkdir_by_handle(                /* not supported */
  805.     dm_sessid_t    sid,
  806.     void        *dirhanp,
  807.     size_t        dirhlen,
  808.     dm_token_t    token,
  809.     void        *hanp,
  810.     size_t        hlen,
  811.     char        *cname);
  812.  
  813. extern int
  814. dm_move_event(
  815.     dm_sessid_t    srcsid,
  816.     dm_token_t    token,
  817.     dm_sessid_t    targetsid,
  818.     dm_token_t    *rtokenp);
  819.  
  820. extern int
  821. dm_obj_ref_hold(
  822.     dm_sessid_t    sid,
  823.     dm_token_t    token,
  824.     void        *hanp,
  825.     size_t        hlen);
  826.  
  827. extern int
  828. dm_obj_ref_query(
  829.     dm_sessid_t    sid,
  830.     dm_token_t    token,
  831.     void        *hanp,
  832.     size_t        hlen);
  833.  
  834. extern int
  835. dm_obj_ref_rele(
  836.     dm_sessid_t    sid,
  837.     dm_token_t    token,
  838.     void        *hanp,
  839.     size_t        hlen);
  840.  
  841. extern int
  842. dm_path_to_fshandle(
  843.     char        *path,
  844.     void        **hanpp,
  845.     size_t        *hlenp);
  846.  
  847. extern int
  848. dm_path_to_handle(
  849.     char        *path,
  850.     void        **hanpp,
  851.     size_t        *hlenp);
  852.  
  853. extern int
  854. dm_pending(
  855.     dm_sessid_t    sid,
  856.     dm_token_t    token,
  857.     dm_timestruct_t *delay);
  858.  
  859. extern int
  860. dm_probe_hole(
  861.     dm_sessid_t    sid,
  862.     void        *hanp,
  863.     size_t        hlen,
  864.     dm_token_t    token,
  865.     dm_off_t    off,
  866.     dm_size_t    len,
  867.     dm_off_t    *roffp,
  868.     dm_size_t    *rlenp);
  869.  
  870. extern int
  871. dm_punch_hole(
  872.     dm_sessid_t    sid,
  873.     void        *hanp,
  874.     size_t        hlen,
  875.     dm_token_t    token,
  876.     dm_off_t    off,
  877.     dm_size_t    len);
  878.  
  879. extern int
  880. dm_query_right(            /* not completely supported; see caveat above */
  881.     dm_sessid_t    sid,
  882.     void        *hanp,
  883.     size_t        hlen,
  884.     dm_token_t    token,
  885.     dm_right_t    *rightp);
  886.  
  887. extern int
  888. dm_query_session(
  889.     dm_sessid_t    sid,
  890.     size_t        buflen,
  891.     void        *bufp,
  892.     size_t        *rlenp);
  893.  
  894. extern dm_ssize_t
  895. dm_read_invis(
  896.     dm_sessid_t    sid,
  897.     void        *hanp,
  898.     size_t        hlen,
  899.     dm_token_t    token,
  900.     dm_off_t    off,
  901.     dm_size_t    len,
  902.     void        *bufp);
  903.  
  904. extern int
  905. dm_release_right(        /* not completely supported; see caveat above */
  906.     dm_sessid_t    sid,
  907.     void        *hanp,
  908.     size_t        hlen,
  909.     dm_token_t    token);
  910.  
  911. extern int
  912. dm_remove_dmattr(
  913.     dm_sessid_t    sid,
  914.     void        *hanp,
  915.     size_t        hlen,
  916.     dm_token_t    token,
  917.     int        setdtime,
  918.     dm_attrname_t    *attrnamep);
  919.  
  920. extern int
  921. dm_request_right(        /* not completely supported; see caveat above */
  922.     dm_sessid_t    sid,
  923.     void        *hanp,
  924.     size_t        hlen,
  925.     dm_token_t    token,
  926.     unsigned int    flags,
  927.     dm_right_t    right);
  928.  
  929. extern int
  930. dm_respond_event(
  931.     dm_sessid_t    sid,
  932.     dm_token_t    token,
  933.     dm_response_t    response,
  934.     int        reterror,
  935.     size_t        buflen,
  936.     void        *respbufp);
  937.  
  938. extern int
  939. dm_send_msg(
  940.     dm_sessid_t    targetsid,
  941.     dm_msgtype_t    msgtype,
  942.     size_t        buflen,
  943.     void        *bufp);
  944.  
  945. extern int
  946. dm_set_disp(
  947.     dm_sessid_t    sid,
  948.     void        *hanp,
  949.     size_t        hlen,
  950.     dm_token_t    token,
  951.     dm_eventset_t    *eventsetp,
  952.     unsigned int    maxevent);
  953.  
  954. extern int
  955. dm_set_dmattr(
  956.     dm_sessid_t    sid,
  957.     void        *hanp,
  958.     size_t        hlen,
  959.     dm_token_t    token,
  960.     dm_attrname_t    *attrnamep,
  961.     int        setdtime,
  962.     size_t        buflen,
  963.     void        *bufp);
  964.  
  965. extern int
  966. dm_set_eventlist(
  967.     dm_sessid_t    sid,
  968.     void        *hanp,
  969.     size_t        hlen,
  970.     dm_token_t    token,
  971.     dm_eventset_t    *eventsetp,
  972.     unsigned int    maxevent);
  973.  
  974. extern int
  975. dm_set_fileattr(
  976.     dm_sessid_t    sid,
  977.     void        *hanp,
  978.     size_t        hlen,
  979.     dm_token_t    token,
  980.     unsigned int    mask,
  981.     dm_fileattr_t    *attrp);
  982.  
  983. extern int
  984. dm_set_inherit(                    /* not supported */
  985.     dm_sessid_t    sid,
  986.     void        *hanp,
  987.     size_t        hlen,
  988.     dm_token_t    token,
  989.     dm_attrname_t    *attrnamep,
  990.     mode_t        mode);
  991.  
  992. extern int
  993. dm_set_region(
  994.     dm_sessid_t    sid,
  995.     void        *hanp,
  996.     size_t        hlen,
  997.     dm_token_t    token,
  998.     unsigned int    nelem,
  999.     dm_region_t    *regbufp,
  1000.     dm_boolean_t    *exactflagp);
  1001.  
  1002. extern int
  1003. dm_set_return_on_destroy(
  1004.     dm_sessid_t    sid,
  1005.     void        *hanp,
  1006.     size_t        hlen,
  1007.     dm_token_t    token,
  1008.     dm_attrname_t    *attrnamep,
  1009.     dm_boolean_t    enable);
  1010.  
  1011. extern int
  1012. dm_symlink_by_handle(                /* not supported */
  1013.     dm_sessid_t    sid,
  1014.     void        *dirhanp,
  1015.     size_t        dirhlen,
  1016.     dm_token_t    token,
  1017.     void        *hanp,
  1018.     size_t        hlen,
  1019.     char        *cname,
  1020.     char        *path);
  1021.  
  1022. extern int
  1023. dm_sync_by_handle(
  1024.     dm_sessid_t    sid,
  1025.     void        *hanp,
  1026.     size_t        hlen,
  1027.     dm_token_t    token);
  1028.  
  1029. extern int
  1030. dm_upgrade_right(        /* not completely supported; see caveat above */
  1031.     dm_sessid_t    sid,
  1032.     void        *hanp,
  1033.     size_t        hlen,
  1034.     dm_token_t    token);
  1035.  
  1036. extern dm_ssize_t
  1037. dm_write_invis(
  1038.     dm_sessid_t    sid,
  1039.     void        *hanp,
  1040.     size_t        hlen,
  1041.     dm_token_t    token,
  1042.     int        flags,
  1043.     dm_off_t    off,
  1044.     dm_size_t    len,
  1045.     void        *bufp);
  1046.  
  1047. /* Non-standard SGI additions to the DMAPI interface. */
  1048.  
  1049. int
  1050. dm_open_by_handle(
  1051.     void        *hanp,
  1052.     size_t        hlen,
  1053.     int        mode);
  1054.  
  1055. extern int
  1056. dm_get_dioinfo(
  1057.     dm_sessid_t    sid,
  1058.     void        *hanp,
  1059.     size_t        hlen,
  1060.     dm_token_t    token,
  1061.     dm_dioinfo_t    *diop);
  1062.  
  1063. #ifdef    __cplusplus
  1064. }
  1065. #endif
  1066.  
  1067. #endif /* __DMAPI_H__ */
  1068.